package compilationunit;

import java.util.Queue;
import java.io.*;

public class Parser_viejo {
//	static final int _EOF = 0;
//	static final int _ident = 1;
//	static final int _enteros = 2;
//	static final int _cadenaCar = 3;
//	static final int _boolean = 4;
//	static final int _char = 5;
//	static final int _class = 6;
//	static final int _false = 7;
//	static final int _int = 8;
//	static final int _new = 9;
//	static final int _short = 10;
//	static final int _static = 11;
//	static final int _true = 12;
//	static final int _void = 13;
//	static final int _dosPuntos = 14;
//	static final int _comma = 15;
//	static final int _punto = 16;
//	static final int _llaveIzda = 17;
//	static final int _corcheteIzda = 18;
//	static final int _parentesisIzda = 19;
//	static final int _menos = 20;
//	static final int _not = 21;
//	static final int _mas = 22;
//	static final int _llaveDer = 23;
//	static final int _corcheteDer = 24;
//	static final int _parentesisDer = 25;
//	static final int _multiplicacion = 26;
//	static final int _div = 27;
//	static final int _menor = 28;
//	static final int _mayor = 29;
//	static final int _igual = 30;
//	static final int _puntoComa = 31;
//	static final int _doblesComillas = 32;
//	static final int _interrogacion = 33;
//	static final int maxT = 41;
//
//	static final boolean T = true;
//	static final boolean x = false;
//	static final int minErrDist = 2;
//
//	public static Token token;    // last recognized token   /* pdt */
//	public static Token la;       // lookahead token
//	static int errDist = minErrDist;
//
//    static TablaSimbolos tablasimbolos = new TablaSimbolos();
//    static Simbolo simbolo = new Simbolo();
//    static Simbolo simbolo_aux;
//
//
//
//	static void SynErr (int n) {
//		if (errDist >= minErrDist) Errors.SynErr(la.line, la.col, n);
//		errDist = 0;
//	}
//
//	public static void SemErr (String msg) {
//		if (errDist >= minErrDist) Errors.Error(token.line, token.col, msg); /* pdt */
//		errDist = 0;
//	}
//
//	public static void SemError (String msg) {
//		if (errDist >= minErrDist) Errors.Error(token.line, token.col, msg); /* pdt */
//		errDist = 0;
//	}
//
//	public static void Warning (String msg) { /* pdt */
//		if (errDist >= minErrDist) Errors.Warn(token.line, token.col, msg);
//		errDist = 0;
//	}
//
//	public static boolean Successful() { /* pdt */
//		return Errors.count == 0;
//	}
//
//	public static String LexString() { /* pdt */
//		return token.val;
//	}
//
//	public static String LookAheadString() { /* pdt */
//		return la.val;
//	}
//
//	static void Get () {
//		for (;;) {
//			token = la; /* pdt */
//			la = Scanner.Scan();
//			if (la.kind <= maxT) { ++errDist; break; }
//
//			la = token; /* pdt */
//		}
//	}
//
//    static void PostGet(){
//        simbolo.setId(token.val);
//        simbolo.setCol(token.col);
//        simbolo.setLinea(token.line);
//        simbolo.setPos(token.pos);
//    }
//
//	static void Expect (int n) {
//		if (la.kind==n) Get(); else { SynErr(n); }
//	}
//
//    static void Esperado (int n){
//        Expect(n);
//        //Para cargar un nuevo token se usa este metodo
//        //y dado que sólo hay un simbolo (global), este metodo se encarga de
//        //llenar de basura sus campos para que no se lean valores del token anterior.
//
//        simbolo.setPos(token.pos);     // token position in the source text (starting at 0)
//        simbolo.setCol(token.col);     // token column (starting at 0)
//        simbolo.setLinea(token.line);    // token line (starting at 1)
//        simbolo.setId(token.val);
//        simbolo.setClaseRelacionada("");
//        simbolo.setColaArgumentos(null);
//        simbolo.setNumArgMetodo(-1);
//        simbolo.setPublico(false);
//        simbolo.setTamano(-1);
//        simbolo.setTipo('-');
//        simbolo.setTipoEnVector('-');
//        simbolo.setTipoRetorno('-');
//        simbolo.setInicializado(false);
//
//    }
//
//
//
//    //Pasa los valores basicos del simbolo a simbolo_aux
//    static void ParametrosBasicos(){
//        simbolo_aux.setId(simbolo.getId());
//        simbolo_aux.setCol(simbolo.getColumna());
//        simbolo_aux.setLinea(simbolo.getLinea());
//        simbolo_aux.setPos(simbolo.getPosicion());
//    }
//
//	static boolean StartOf (int s) {
//		return set[s][la.kind];
//	}
//
//	static void ExpectWeak (int n, int follow) {
//		if (la.kind == n) Get();
//		else {
//			SynErr(n);
//			while (!StartOf(follow)) Get();
//		}
//	}
//
//	static boolean WeakSeparator (int n, int syFol, int repFol) {
//		boolean[] s = new boolean[maxT+1];
//		if (la.kind == n) { Get(); return true; }
//		else if (StartOf(repFol)) return false;
//		else {
//			for (int i=0; i <= maxT; i++) {
//				s[i] = set[syFol][i] || set[repFol][i] || set[0][i];
//			}
//			SynErr(n);
//			while (!s[la.kind]) Get();
//			return StartOf(syFol);
//		}
//	}
//
//	static void CompilationUnit() {
//
//
//		while (la.kind == 6) {
//			DeclaracionClases();
//		}
//		tablasimbolos.DestruirTSG();
//	}
//
//	static void DeclaracionClases() {
//		Esperado(6);
//		Esperado(1);
//		simbolo_aux = tablasimbolos.BuscarAbuelo(simbolo.getId());
//		if (simbolo_aux == null){
//            ParametrosBasicos();
//            simbolo_aux.setTipo('x');
//			tablasimbolos.t_actual = tablasimbolos.abuelo;
//			tablasimbolos.InsertarSimbolo(simbolo_aux,simbolo_aux.getId());
//			tablasimbolos.CrearTablaPadre(simbolo_aux.getId());
//            //una vez insertado el simbolo lo reinicio.
//            simbolo_aux = null;
//		}
//		else{
//		SemError ("La clase ya esta definida");
//		}
//
//		Esperado(17);
//		CuerpoClase();
//		Esperado(23);
//	}
//
//	static void Tipos() {
//		if (la.kind == 4 || la.kind == 8 || la.kind == 13) {
//			TiposCompuestos();
//		} else if (la.kind == 4 || la.kind == 8 || la.kind == 13) {
//			TiposSimples();
//		} else SynErr(42);
//	}
//
//	static void TiposCompuestos() {
//		TiposSimples();
//		Esperado(18);
//		Esperado(2);
//        simbolo_aux.setTipo('v');
//        int enteros = Integer.parseInt(simbolo.getId());
//		simbolo_aux.setNumArgMetodo(enteros);
//		tablasimbolos.t_actual.setDesplazamiento(enteros * simbolo_aux.getTamano());
//		Esperado(24);
//
//	}
//
//	static void TiposSimples() {
//
//		if (la.kind == 8) {
//			Get();
//            simbolo_aux.setTipo('e');
//			simbolo_aux.setTamano(2);
//            simbolo_aux.setTipoEnVector('e');
//            simbolo_aux.setTipoRetorno('e');
//		} else if (la.kind == 4) {
//			Get();
//			simbolo_aux.setTipo('b');
//			simbolo_aux.setTamano(1);
//            simbolo_aux.setTipoEnVector('b');
//            simbolo_aux.setTipoRetorno('b');
//		} else if (la.kind == 13) {
//			Get();
//			simbolo_aux.setTipo('n');
//            simbolo_aux = simbolo;
//		} else SynErr(43);
//	}
//
//	static void DeclaracionTipos() {
//        if (StartOf(1)) {
//			if (la.kind == 34 || la.kind == 35) {
//				if (la.kind == 34) {
//					Get();
//					simbolo_aux.setPublico(true);
//				} else {
//					Get();
//				}
//			}
//			TiposSimples();
//			Esperado(1);
//            ParametrosBasicos();
//            //Puede que aqui debiera manchar los atributos que no necesito
//            //pero por ahora así se queda.
//            int existe = tablasimbolos.InsertarSimbolo(simbolo_aux, simbolo_aux.getId());
//            simbolo_aux = null;
//			if (existe != 0) SemError ("El identificador ya está en uso");
//			Esperado(31);
//
//
//		} else if (la.kind == 1) {
//			Get();
//            PostGet();
//			simbolo = tablasimbolos.BuscarAbuelo(simbolo.getId());
//			if (simbolo == null)
//			     SemError ("No existe ninguna clase con ese identificador");
//			String claseasociad = simbolo.getId();
//
//			Esperado(1);
//            ParametrosBasicos();
//			simbolo_aux.setTipo('x');
//			simbolo_aux.setClaseRelacionada(claseasociad);
//			int existe = tablasimbolos.InsertarSimbolo(simbolo_aux, simbolo_aux.getId());
//            simbolo_aux = null;
//			if (existe != 0) SemError ("El identificador ya está en uso");
//
//			Esperado(31);
//		} else if (la.kind == 4 || la.kind == 8 || la.kind == 13) {
//			TiposCompuestos();
//			Esperado(1);
//            ParametrosBasicos();
//			int existe = tablasimbolos.InsertarSimbolo(simbolo_aux, simbolo_aux.getId());
//            simbolo_aux = null;
//			if (existe != 0) SemError ("El identificador ya está en uso");
//
//			Esperado(31);
//		} else SynErr(44);
//	}
//
//	static void Asignaciones() {
//		if (la.kind == 1) {
//			AsigAtributo();
//		} else if (la.kind == 1) {
//			AsigVector();
//		} else if (la.kind == 1) {
//			AsigVariable();
//		} else SynErr(45);
//	}
//
//	static void AsigAtributo() {
//		if (la.kind == 1) {
//			Get();
//            PostGet();
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ninguna clase con ese identificador");
//			if (simbolo.getTipo() != 'x') SemError ("El identificador no se corresponde con ninguna clase declarada");
//			TablaSimb tio = tablasimbolos.BuscarTio(simbolo.getClaseRelacionada());
//			if (tio == null)  SemError ("No se ha encontrado la clase");
//			Esperado(16);
//			Esperado(1);
//			simbolo = tablasimbolos.BuscarEn(tio,simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ningún atributo en la clase especificada con ese identificador");
//			if (!simbolo.getPublico()) SemError ("Intento de acceso a atributo declarado como privado");
//			if (simbolo.getTipo() != 'e') SemError ("Se esperaba un atributo de tipo int");
//            simbolo.setInicializado(true);
//			Esperado(30);
//			ExpresionMat();
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Get();
//            PostGet();
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ninguna clase con ese identificador");
//			if (simbolo.getTipo() != 'x') SemError ("El identificador no se corresponde con ninguna clase declarada");
//			TablaSimb tio = tablasimbolos.BuscarTio(simbolo.getClaseRelacionada());
//			if (tio == null)  SemError ("No se ha encontrado la clase");
//
//			Esperado(16);
//			Esperado(1);
//			simbolo = tablasimbolos.BuscarEn(tio,simbolo.getId());
//			 if (simbolo == null)  SemError ("No existe ningún atributo en la clase especificada con ese identificador");
//			if (!simbolo.getPublico()) SemError ("Intento de acceso a atributo declarado como privado");
//            if (simbolo.getTipo() != 'b') SemError ("Se esperaba un atributo de tipo boolean");
//            simbolo.setInicializado(true);
//			Esperado(30);
//			ExpresionBool();
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Get();
//            PostGet();
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ninguna clase con ese identificador");
//			if (simbolo.getTipo() != 'x') SemError ("El identificador no se corresponde con ninguna clase declarada");
//			TablaSimb tio = tablasimbolos.BuscarTio(simbolo.getClaseRelacionada());
//			if (tio == null)  SemError ("No se ha encontrado la clase");
//
//			Esperado(16);
//			Esperado(1);
//			simbolo = tablasimbolos.BuscarEn(tio,simbolo.getId());
//			 if (simbolo == null)  SemError ("No existe ningún atributo en la clase especificada con ese identificador");
//			if (!simbolo.getPublico()) SemError ("Intento de acceso a atributo declarado como privado");
//            if (simbolo.getTipo() != 'b') SemError ("Se esperaba un atributo de tipo boolean");
//            simbolo.setInicializado(true);
//			Esperado(30);
//			ExpresionLogica();
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Get();
//            PostGet();
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ninguna clase con ese identificador");
//			if (simbolo.getTipo() != 'x') SemError ("El identificador no se corresponde con ninguna clase declarada");
//			TablaSimb tio = tablasimbolos.BuscarTio(simbolo.getClaseRelacionada());
//			if (tio == null)  SemError ("No se ha encontrado la clase");
//
//			Esperado(16);
//			Esperado(1);
//			simbolo = tablasimbolos.BuscarEn(tio,simbolo.getId());
//			 if (simbolo == null)  SemError ("No existe ningún atributo en la clase especificada con ese identificador");
//			if (!simbolo.getPublico()) SemError ("Intento de acceso a atributo declarado como privado");
//            char tipoatrib = simbolo.getTipo();
//            simbolo.setInicializado(true);
//			Esperado(30);
//			Esperado(1);
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ningún método con ese identificador");
//			else
//			{ if (simbolo.getTipoRetorno() != tipoatrib) SemError ("Tipo del atributo distinto a tipo de retorno del método");
//			}
//
//			Esperado(19);
//			while (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//                //numarg puede que haga falta declararlo como atributo de esta clase.
//                //ya se verá.
//				int numarg = simbolo.getNumArgMetodo();
//				ArgLlamMet();
//			}
//			Esperado(25);
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Get();
//            PostGet();
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ninguna clase con ese identificador");
//			if (simbolo.getTipo() != 'x') SemError ("El identificador no se corresponde con ninguna clase declarada");
//			TablaSimb tio = tablasimbolos.BuscarTio(simbolo.getClaseRelacionada());
//			if (tio == null)  SemError ("No se ha encontrado la clase");
//
//			Esperado(16);
//			Esperado(1);
//			simbolo = tablasimbolos.BuscarEn(tio,simbolo.getId());
//			 if (simbolo == null)  SemError ("No existe ningún atributo en la clase especificada con ese identificador");
//			if (!simbolo.getPublico()) SemError ("Intento de acceso a atributo declarado como privado");
//            char tipoatrib = simbolo.getTipo();
//            simbolo.setInicializado(true);
//			Esperado(30);
//			Esperado(1);
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ninguna clase con ese identificador");
//			if (simbolo.getTipo() != 'x') SemError ("El identificador no se corresponde con ninguna clase declarada");
//			TablaSimb tio2 = tablasimbolos.BuscarTio(simbolo.getClaseRelacionada());
//			if (tio2 == null)  SemError ("No se ha encontrado la clase");
//
//			Esperado(16);
//			Esperado(1);
//			simbolo = tablasimbolos.BuscarEn(tio2,simbolo.getId());
//			if (simbolo.getTipoRetorno() != tipoatrib) SemError ("Tipo del atributo distinto a tipo de retorno del método");
//			if (!simbolo.getPublico()) SemError ("Intento de acceso a un metodo declarado como privado");
//
//			Esperado(19);
//			while (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//				int numarg = simbolo.getNumArgMetodo();
//				ArgLlamMet();
//			}
//			Esperado(25);
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Get();
//            PostGet();
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ninguna clase con ese identificador");
//			if (simbolo.getTipo() != 'x') SemError ("El identificador no se corresponde con ninguna clase declarada");
//			TablaSimb tio = tablasimbolos.BuscarTio(simbolo.getClaseRelacionada());
//			if (tio == null)  SemError ("No se ha encontrado la clase");
//			Esperado(16);
//			Esperado(1);
//			simbolo = tablasimbolos.BuscarEn(tio,simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ningún atributo en la clase especificada con ese identificador");
//			if (!simbolo.getPublico()) SemError ("Intento de acceso a atributo declarado como privado");
//			if (simbolo.getTipo() != 'e') SemError ("Se esperaba un atributo de tipo int");
//            simbolo.setInicializado(true);
//			Esperado(30);
//			OpCondicional();
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Get();
//            PostGet();
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ninguna clase con ese identificador");
//			if (simbolo.getTipo() != 'x') SemError ("El identificador no se corresponde con ninguna clase declarada");
//			TablaSimb tio = tablasimbolos.BuscarTio(simbolo.getClaseRelacionada());
//			if (tio == null)  SemError ("No se ha encontrado la clase");
//			Esperado(16);
//			Esperado(1);
//			simbolo = tablasimbolos.BuscarEn(tio,simbolo.getId());
//            String name = simbolo.getId();
//			if (simbolo == null)  SemError ("No existe ningún atributo en la clase especificada con ese identificador");
//			if (!simbolo.getPublico()) SemError ("Intento de acceso a atributo declarado como privado");
//			if (simbolo.getTipo() != 'x') SemError ("Se esperaba un atributo de tipo clase");
//            simbolo.setInicializado(true);
//			Esperado(30);
//			Esperado(9);
//			Esperado(1);
//			if (!simbolo.getClaseRelacionada().equals(name)) SemError ("El nombre del constructor no coincide con el nombre de la clase");
//            //Aqui debería comprobar que el constructor de esa clase ya esta definido.
//			Esperado(19);
//			while (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//				int numarg = simbolo.getNumArgMetodo();
//				ArgLlamMet();
//			}
//			Esperado(25);
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Get();
//            PostGet();
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ninguna clase con ese identificador");
//			if (simbolo.getTipo() != 'x') SemError ("El identificador no se corresponde con ninguna clase declarada");
//			TablaSimb tio = tablasimbolos.BuscarTio(simbolo.getClaseRelacionada());
//			if (tio == null)  SemError ("No se ha encontrado la clase");
//			Esperado(16);
//			Esperado(1);
//			simbolo = tablasimbolos.BuscarEn(tio,simbolo.getId());
//            String name = simbolo.getId();
//			if (simbolo == null)  SemError ("No existe ningún atributo en la clase especificada con ese identificador");
//			if (!simbolo.getPublico()) SemError ("Intento de acceso a atributo declarado como privado");
//			char tipoatrib = simbolo.getTipo();
//            simbolo.setInicializado(true);
//			Esperado(30);
//			Esperado(1);
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ninguna clase con ese identificador");
//			if (simbolo.getTipo() != 'x') SemError ("El identificador no se corresponde con ninguna clase declarada");
//			TablaSimb tio2 = tablasimbolos.BuscarTio(simbolo.getClaseRelacionada());
//			if (tio2 == null)  SemError ("No se ha encontrado la clase");
//
//			Esperado(16);
//			Esperado(1);
//			simbolo = tablasimbolos.BuscarEn(tio2,simbolo.getId());
//			  if (simbolo.getTipo() != tipoatrib) SemError ("Intento de asignación de atributos de distinto tipo");
//			if (!simbolo.getPublico()) SemError ("Intento de acceso a atributo declarado como privado");
//			Esperado(31);
//		} else SynErr(46);
//	}
//
//	static void AsigVector() {
//		if (la.kind == 1) {
//			Get();
//            PostGet();
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ninguna variable con ese identificador");
//			if (simbolo.getTipo() != 'v') SemError ("La variable no es de tipo vector");
//			if (simbolo.getTipoEnVector() == 'e') SemError ("Se esperaba un vector de int");
//			Esperado(18);
//			IndiceVector();
//			Esperado(24);
//			Esperado(30);
//			ExpresionMat();
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Get();
//            PostGet();
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ninguna variable con ese identificador");
//			if (simbolo.getTipo() != 'v') SemError ("La variable no es de tipo vector");
//			if (simbolo.getTipoEnVector() == 'b') SemError ("Se esperaba un vector de boolean");
//			Esperado(18);
//			IndiceVector();
//			Esperado(24);
//			Esperado(30);
//			ExpresionBool();
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Get();
//            PostGet();
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ninguna variable con ese identificador");
//			if (simbolo.getTipo() != 'v') SemError ("La variable no es de tipo vector");
//			if (simbolo.getTipoEnVector() == 'b') SemError ("Se esperaba un vector de boolean");
//			Esperado(18);
//			IndiceVector();
//			Esperado(24);
//			Esperado(30);
//			ExpresionLogica();
//			Esperado(31);
//		} else if (la.kind == 1) {
//            //ASIGNACION DEL RETORNO DE UN METODO A UN ELEMENTO DE UN VECTOR.
//			Get();
//            PostGet();
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No existe ninguna variable con ese identificador");
//			if (simbolo.getTipo() != 'v') SemError ("La variable no es de tipo vector");
//			char tipovector = simbolo.getTipoEnVector();
//			Esperado(18);
//			IndiceVector();
//			Esperado(24);
//			Esperado(30);
//			Esperado(1);
//			simbolo = tablasimbolos.Buscar(simbolo.getId());
//			if (simbolo == null)  SemError ("No se ha encontrado ningún método con ese identificador");
//			else
//			{ if (simbolo.getTipoRetorno() != tipovector) SemError ("El tipo de retorno del metodo no cincide con el tipo del vector");
//			}
//			Esperado(19);
//			while (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//				int numarg = simbolo.getNumArgMetodo();
//				ArgLlamMet();
//			}
//			Esperado(25);
//			Esperado(31);
//		} else if (la.kind == 1) {
//
//            EMPIEZA DESDE AQUI
//			Simbolo simbolo = new Simbolo();
//			Get();
//			simbolo = tablasimbolos.Buscar(ident);
//			if (simbolo == null)  SemError ("error (currate el mensaje)");
//			if (simbolo.getTipo() != 'v') SemError ("error (currate el mensaje)");
//			char tipovect = getTipoEnVector();
//
//			Esperado(18);
//			IndiceVector();
//			Esperado(24);
//			Esperado(30);
//			Esperado(1);
//			simbolo = tablasimbolos.Buscar(ident);
//			if (simbolo == null)  SemError ("error (currate el mensaje)");
//			if (simbolo.getTipo() != 'x') SemError ("error (currate el mensaje)");
//			TablaSimb tio = tablasimbolos.BuscarTio(simbolo.claserelacionada);
//			if (tio == null)  SemError ("error (currate el mensaje)");
//
//			Esperado(16);
//			Esperado(1);
//			simbolo = tablasimbolos.BuscarEn(tio,ident);
//			if (simbolo.getTipoRetorno() != tipovect) SemError ("error (currate el mensaje)");
//			if (!simbolo.getPublico()) SemError ("error (currate el mensaje)");
//
//			Esperado(19);
//			while (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//				Queue cola = simbolo.getcolaArgumentos();
//				int numarg = simbolo.getNumArgMetodo();
//				ArgLlamMet();
//			}
//			Esperado(25);
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Simbolo simbolo = new Simbolo();
//			Get();
//			simbolo = tablasimbolos.Buscar(ident);
//			if (simbolo == null)  SemError ("error (currate el mensaje)");
//			if (simbolo.getTipo() != 'v') SemError ("error (currate el mensaje)");
//			char tipovect = getTipoEnVector();
//
//			Esperado(18);
//			IndiceVector();
//			Esperado(24);
//			Esperado(30);
//			if ('e' != tipovect) SemError ("error (currate el mensaje)");
//			OpCondicional();
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Simbolo simbolo = new Simbolo();
//			Get();
//			simbolo = tablasimbolos.Buscar(ident);
//			if (simbolo == null)  SemError ("error (currate el mensaje)");
//			if (simbolo.getTipo() != 'v') SemError ("error (currate el mensaje)");
//			char tipovect = getTipoEnVector();
//
//			Esperado(18);
//			IndiceVector();
//			Esperado(24);
//			Esperado(30);
//			Esperado(1);
//			simbolo = tablasimbolos.Buscar(ident);
//			if (simbolo == null)  SemError ("error (currate el mensaje)");
//			if (simbolo.getTipo() != 'x') SemError ("error (currate el mensaje)");
//			TablaSimb tio = tablasimbolos.BuscarTio(simbolo.claserelacionada);
//			if (tio == null)  SemError ("error (currate el mensaje)");
//
//			Esperado(16);
//			Esperado(1);
//			simbolo = tablasimbolos.BuscarEn(tio,ident);
//			  if (simbolo.getTipo() != tipovect) SemError ("error (currate el mensaje)");
//			if (!simbolo.getPublico()) SemError ("error (currate el mensaje)");
//
//			Esperado(31);
//		} else SynErr(47);
//	}
//
//	static void AsigVariable() {
//		if (la.kind == 1) {
//			Simbolo simbolo = new Simbolo();
//			Get();
//			simbolo = tablasimbolos.Buscar( ident);
//			 if (simbolo == null)  SemError ("error (currate el mensaje)");
//			Esperado(30);
//			ExpresionMat();
//			char tipo = simbolo.getTipo;
//			if (tipo != 'e') SemError ("error (currate el mensaje)");
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Simbolo simbolo = new Simbolo();
//			Get();
//			simbolo = tablasimbolos.Buscar( ident);
//			 if (simbolo == null)  SemError ("error (currate el mensaje)");
//			Esperado(30);
//			ExpresionBool();
//			char tipo = simbolo.getTipo;
//			if (tipo != 'b') SemError ("error (currate el mensaje)");
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Simbolo simbolo = new Simbolo();
//			Get();
//			simbolo = tablasimbolos.Buscar( ident);
//			 if (simbolo == null)  SemError ("error (currate el mensaje)");
//			Esperado(30);
//			ExpresionLogica();
//			char tipo = simbolo.getTipo;
//			if (tipo != 'b') SemError ("error (currate el mensaje)");
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Simbolo simbolo = new Simbolo();
//			Get();
//			simbolo = tablasimbolos.Buscar( ident);
//			 if (simbolo == null)  SemError ("error (currate el mensaje)");
//			char tipovar = simbolo.getTipo();
//
//			Esperado(30);
//			Esperado(1);
//			simbolo = tablasimbolos.Buscar(ident);
//			if (simbolo == null)  SemError ("error (currate el mensaje)");
//			else
//			{ if (simbolo.getTipoRetorno() != tipovar) SemError ("error (currate el mensaje)");
//			}
//
//			Esperado(19);
//			while (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//				Queue cola = simbolo.getcolaArgumentos();
//				int numarg = simbolo.getNumArgMetodo();
//				ArgLlamMet();
//			}
//			Esperado(25);
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Simbolo simbolo = new Simbolo();
//			Get();
//			simbolo = tablasimbolos.Buscar( ident);
//			 if (simbolo == null)  SemError ("error (currate el mensaje)");
//			char tipovar = simbolo.getTipo();
//
//			Esperado(30);
//			Esperado(1);
//			simbolo = tablasimbolos.Buscar(ident);
//			if (simbolo == null)  SemError ("error (currate el mensaje)");
//			if (simbolo.getTipo() != 'x') SemError ("error (currate el mensaje)");
//			TablaSimb tio = tablasimbolos.BuscarTio(simbolo.claserelacionada);
//			if (tio == null)  SemError ("error (currate el mensaje)");
//
//			Esperado(16);
//			Esperado(1);
//			simbolo = tablasimbolos.BuscarEn(tio,ident);
//			if (simbolo.getTipoRetorno() != tipovar) SemError ("error (currate el mensaje)");
//			if (!simbolo.getPublico()) SemError ("error (currate el mensaje)");
//
//			Esperado(19);
//			while (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//				Queue cola = simbolo.getcolaArgumentos();
//				int numarg = simbolo.getNumArgMetodo();
//				ArgLlamMet();
//			}
//			Esperado(25);
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Simbolo simbolo = new Simbolo();
//			Get();
//			simbolo = tablasimbolos.Buscar( ident);
//			 if (simbolo == null)  SemError ("error (currate el mensaje)");
//			Esperado(30);
//			OpCondicional();
//			char tipo = simbolo.getTipo;
//			if (tipo != 'e') SemError ("error (currate el mensaje)");
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Simbolo simbolo = new Simbolo();
//			Get();
//			simbolo = tablasimbolos.Buscar(ident);
//			 if (simbolo == null)  SemError ("error (currate el mensaje)");
//			if (simbolo.getTipo() != 'x') SemError ("error (currate el mensaje)");
//			String claserelacionada = simbolo.getClaseRelacionada();
//
//			Esperado(30);
//			Esperado(9);
//			Esperado(1);
//			if (!claserelacionada.equals(ident)) SemError ("error (currate el mensaje)");
//			Esperado(19);
//			while (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//				Queue cola = simbolo.getcolaArgumentos();
//				int numarg = simbolo.getNumArgMetodo();
//				ArgLlamMet();
//			}
//			Esperado(25);
//			Esperado(31);
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Simbolo simbolo = new Simbolo();
//			Get();
//			simbolo = tablasimbolos.Buscar(ident);
//			 if (simbolo == null)  SemError ("error (currate el mensaje)");
//			char tipo = simbolo.getTipo();
//
//			Esperado(30);
//			Esperado(1);
//			simbolo = tablasimbolos.Buscar(ident);
//			if (simbolo == null)  SemError ("error (currate el mensaje)");
//			if (simbolo.getTipo() != 'x') SemError ("error (currate el mensaje)");
//			TablaSimb tio = tablasimbolos.BuscarTio(simbolo.claserelacionada);
//			if (tio == null)  SemError ("error (currate el mensaje)");
//
//			Esperado(16);
//			Esperado(1);
//			simbolo = tablasimbolos.BuscarEn(tio,ident);
//			  if (simbolo.getTipo() != tipovar) SemError ("error (currate el mensaje)");
//			if (!simbolo.getPublico()) SemError ("error (currate el mensaje)");
//
//			Esperado(31);
//		} else SynErr(48);
//	}
//
//	static void ExpresionMat() {
//		ExpresionMat2();
//		ExpresionMat1();
//	}
//
//	static void ExpresionBool() {
//		ExpresionMat();
//		if (la.kind == 28 || la.kind == 29) {
//			if (la.kind == 29) {
//				Get();
//				Simbolo simbolo = new Simbolo(">",'j');
//			} else {
//				Get();
//				Simbolo simbolo = new Simbolo("<",'j');
//			}
//		}
//		ExpresionMat();
//	}
//
//	static void ExpresionLogica() {
//		Esperado(21);
//		Simbolo simbolo = new Simbolo("!",'l');
//		if (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//			if (la.kind == 1) {
//				Get();
//				Simbolo simbolo = Buscar(ident);
//				if (simbolo == null) SemError ("error (currate el mensaje)");
//				if (simbolo.getTipo() != 'b') SemError ("error (currate el mensaje)");
//
//			} else {
//				ExpresionBool();
//			}
//		}
//	}
//
//	static void ArgLlamMet() {
//		if (numarg < 0) SemError ("error (currate el mensaje)");
//		if (la.kind == 1) {
//			Get();
//			numarg = numarg -1;
//			Simbolo simbolo2 = Buscar(ident);
//			if (simbolo2.getTipo() != cola.poll().getTipo()) SemError ("error (currate el mensaje)");
//			while (la.kind == 15) {
//				Get();
//				ArgLlamMet();
//			}
//		} else if (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//			ExpresionMat();
//			numarg = numarg -1;
//			if ('e' != cola.poll().getTipo()) SemError ("error (currate el mensaje)");
//			while (la.kind == 15) {
//				Get();
//				ArgLlamMet();
//			}
//		} else if (la.kind == 1) {
//			LlamadaMetodo();
//			numarg = numarg -1;
//			if (simbolo.getTipoRetorno() != cola.poll().getTipo()) SemError ("error (currate el mensaje)");
//			while (la.kind == 15) {
//				Get();
//				ArgLlamMet();
//			}
//		} else SynErr(49);
//	}
//
//	static void OpCondicional() {
//		Esperado(19);
//		ExpresionBool();
//		Esperado(25);
//		Esperado(33);
//		if (la.kind == 19) {
//			Get();
//		}
//		ExpresionMat();
//		if (la.kind == 25) {
//			Get();
//		}
//		Esperado(14);
//		if (la.kind == 19) {
//			Get();
//		}
//		ExpresionMat();
//		if (la.kind == 25) {
//			Get();
//		}
//	}
//
//	static void IndiceVector() {
//		if (la.kind == 1) {
//			Get();
//			simbolo = tablasimbolos.Buscar(ident);
//			if (simbolo.getTipo() != 'e') SemError ("error (currate el mensaje)");
//
//		} else if (la.kind == 2) {
//			Get();
//			if (simbolo.getNumArgMetodo < enteros) SemError ("error (currate el mensaje)");
//		} else if (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//			ExpresionMat();
//		} else SynErr(50);
//		Esperado(31);
//	}
//
//	static void CuerpoClase() {
//		if (StartOf(2)) {
//			DeclaracionTipos();
//			while (StartOf(2)) {
//				CuerpoClase();
//			}
//		} else if (StartOf(1)) {
//			DeclaracionMetodo();
//			while (StartOf(2)) {
//				CuerpoClase();
//			}
//		} else if (la.kind == 1) {
//			ConstructorMetodo();
//			while (StartOf(2)) {
//				CuerpoClase();
//			}
//		} else if (la.kind == 34) {
//			DeclaracionMain();
//			while (StartOf(2)) {
//				CuerpoClase();
//			}
//		} else SynErr(51);
//	}
//
//	static void DeclaracionMetodo() {
//		Simbolo simbolo = new Simbolo();
//		if (la.kind == 34 || la.kind == 35) {
//			if (la.kind == 34) {
//				Get();
//				simbolo.setPublico(true);
//			} else {
//				Get();
//			}
//		}
//		Tipos();
//		simbolo.setTipoRetorno(Tipos);
//		Esperado(1);
//		simbolo.setId(ident); simbolo.setTipo('m');
//		Esperado(19);
//		if (la.kind == 4 || la.kind == 8 || la.kind == 13) {
//			if (la.kind == 4 || la.kind == 8 || la.kind == 13) {
//				ArgDeclaracion();
//			} else {
//				Get();
//			}
//		}
//		Esperado(25);
//		TablaSimb t_aux = t_actual;
//		TablaSimb tabla = tablasimbolos.CrearTablaHijo(ident);
//		t_aux.AnadirHijo(tabla);
//		tabla.AnadirArgMetodo(simbolo.getcolaArgumentos());
//		Esperado(17);
//		CuerpoMetodo();
//		if (!tablasimbolos.t_actual.getExisteReturn()) SemError ("error (currate el mensaje)");
//		Esperado(23);
//	}
//
//	static void ConstructorMetodo() {
//		Esperado(1);
//		Simbolo simbolo2 = BuscarAbuelo(ident);
//		if (simbolo2 == null) SemError ("error (currate el mensaje)");
//		if (tablasimbolos.t_actual.nombre != ident) SemError ("error (currate el mensaje)");
//		Simbolo simbolo = new Simbolo(ident,'m');
//		simbolo.setTipoRetorno('x');
//		tablasimbolos.t_actual.InsertarSimbolo(simbolo);
//
//		Esperado(19);
//		if (la.kind == 4 || la.kind == 8 || la.kind == 13) {
//			if (la.kind == 4 || la.kind == 8 || la.kind == 13) {
//				ArgDeclaracion();
//			} else {
//				Get();
//			}
//		}
//		Esperado(25);
//		TablaSimb t_aux = t_actual;
//		TablaSimb tabla = tablasimbolos.CrearTablaHijo(ident);
//		t_aux.AnadirHijo(tabla);
//		tabla.AnadirArgMetodo(simbolo.getcolaArgumentos());
//		Esperado(17);
//		while (StartOf(3)) {
//			SentenciasConstructor();
//		}
//		Esperado(23);
//	}
//
//	static void DeclaracionMain() {
//		if (tablasimbolos.getExisteMain()) SemError ("error (currate el mensaje)");
//		tablasimbolos.setExisteMain(true);
//		Esperado(34);
//		Esperado(13);
//		Esperado(36);
//		Esperado(19);
//		Esperado(13);
//		Esperado(25);
//		Simbolo simbolo = new Simbolo("main", 'm');
//		tablasimbolos.t_actual.InsertarSimbolo(simbolo);
//		TablaSimb t_aux = t_actual;
//		TablaSimb tabla = tablasimbolos.CrearTablaHijo(ident);
//		t_aux.AnadirHijo(tabla);
//		;
//
//		Esperado(17);
//		CuerpoMetodoMain();
//		Esperado(23);
//	}
//
//	static void ArgDeclaracion() {
//		Tipos();
//		Esperado(1);
//		Argumento arg = new Argumento(Tipos, ident);
//		if (!simbolo.getcolaArgumentos().offer(arg)) SemError ("error (currate el mensaje)");
//		simbolo.setNumArgMetodo(simbolo.getNumArgMetodo() + 1);
//		while (la.kind == 15) {
//			Get();
//			ArgDeclaracion();
//		}
//	}
//
//	static void CuerpoMetodo() {
//		while (StartOf(4)) {
//			if (StartOf(2)) {
//				DeclaracionTipos();
//				while (StartOf(4)) {
//					CuerpoMetodo();
//				}
//			} else if (la.kind == 1) {
//				Asignaciones();
//				while (StartOf(4)) {
//					CuerpoMetodo();
//				}
//			} else if (la.kind == 1) {
//				LlamadaMetodo();
//				while (StartOf(4)) {
//					CuerpoMetodo();
//				}
//			} else if (la.kind == 38) {
//				For();
//				while (StartOf(4)) {
//					CuerpoMetodo();
//				}
//			} else if (la.kind == 39 || la.kind == 40) {
//				ES();
//				while (StartOf(4)) {
//					CuerpoMetodo();
//				}
//			} else {
//				Retorno();
//				while (StartOf(4)) {
//					CuerpoMetodo();
//				}
//			}
//		}
//	}
//
//	static void LlamadaMetodo() {
//		if (la.kind == 1) {
//			LlamadaMetodoPropio();
//		} else if (la.kind == 1) {
//			LlamadaMetodoAjeno();
//		} else SynErr(52);
//	}
//
//	static void For() {
//		Esperado(38);
//		Esperado(19);
//		if (la.kind == 1) {
//			Asignaciones();
//		}
//		Esperado(31);
//		ExpresionBool();
//		Esperado(31);
//		if (la.kind == 1) {
//			Asignaciones();
//		}
//		Esperado(25);
//		if (StartOf(5)) {
//			if (la.kind == 17) {
//				Sent1();
//			} else {
//				Sent2();
//			}
//		}
//	}
//
//	static void ES() {
//		if (la.kind == 39) {
//			Get();
//			Esperado(19);
//			Esperado(1);
//			Simbolo simbolo = Buscar(ident);
//			if (simbolo == null) SemError ("error (currate el mensaje)");
//			if (simbolo.getTipo != 'e') SemError ("error (currate el mensaje)");
//			Esperado(25);
//			Esperado(31);
//		} else if (la.kind == 40) {
//			Get();
//			Esperado(19);
//			if (StartOf(6)) {
//				if (la.kind == 1) {
//					Get();
//					Simbolo simbolo = Buscar(ident);
//					if (simbolo == null) SemError ("error (currate el mensaje)");
//					if (simbolo.getTipo != 'e') SemError ("error (currate el mensaje)");
//				} else if (la.kind == 3) {
//					Get();
//					Simbolo simbolo = Simbolo(ident,'s');
//				} else {
//					ExpresionMat();
//				}
//			}
//			Esperado(25);
//			Esperado(31);
//		} else SynErr(53);
//	}
//
//	static void Retorno() {
//		Esperado(37);
//		if (StartOf(7)) {
//			if (StartOf(7)) {
//				Expresion();
//				//El tipo de la expresion debe coincidir con el tipo de retorno del metodo
//			} else {
//				Get();
//				Simbolo simbolo = Buscar(ident);
//				Simbolo simbolo2 = BuscarPadre(t_actual.getNombre);
//				if (simbolo.getTipo() != simbolo2.getTipoRetorno()) SemError ("error (currate el mensaje)");
//
//			}
//		}
//		tablasimbolos.t_actual.setExisteRetorno(true);
//		Esperado(31);
//	}
//
//	static void LlamadaMetodoPropio() {
//		Esperado(1);
//		Simbolo simbolo = Buscar(ident);
//		if (simbolo == null) SemError ("error (currate el mensaje)");
//		if (simbolo.getTipo != 'm') SemError ("error (currate el mensaje)");
//		if (simbolo.getTipoRetorno != 'n') SemError ("error (currate el mensaje)");
//		Esperado(19);
//		while (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//			Queue cola = simbolo.getcolaArgumentos();
//			int numarg = simbolo.getNumArgMetodo();
//			ArgLlamMet();
//		}
//		Esperado(25);
//		Esperado(31);
//	}
//
//	static void LlamadaMetodoAjeno() {
//		Esperado(1);
//		Simbolo simbolo = Buscar(ident);
//		if (simbolo == null) SemError ("error (currate el mensaje)");
//		if (simbolo.getTipo != 'x') SemError ("error (currate el mensaje)");
//		String claserelac = simbolo.getClaseRelacionada();
//		TablaSimb tabla = BuscarTio(claserelac);
//		if (tabla == null) SemError ("error (currate el mensaje)");
//		Esperado(16);
//		Esperado(1);
//		Simbolo simbolo = BuscarEn(tabla, ident);
//		if (simbolo == null) SemError ("error (currate el mensaje)");
//		if (simbolo.getTipo != 'm') SemError ("error (currate el mensaje)");
//		if (simbolo.getTipoRetorno != 'n') SemError ("error (currate el mensaje)");
//
//		Esperado(19);
//		while (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//			Queue cola = simbolo.getcolaArgumentos();
//			int numarg = simbolo.getNumArgMetodo();
//			ArgLlamMet();
//		}
//		Esperado(25);
//		Esperado(31);
//	}
//
//	static void SentenciasConstructor() {
//		if (la.kind == 1) {
//			LlamadaMetodo();
//			while (StartOf(3)) {
//				SentenciasConstructor();
//			}
//		} else if (la.kind == 38) {
//			For();
//			while (StartOf(3)) {
//				SentenciasConstructor();
//			}
//		} else if (la.kind == 1) {
//			Asignaciones();
//			while (StartOf(3)) {
//				SentenciasConstructor();
//			}
//		} else if (la.kind == 39 || la.kind == 40) {
//			ES();
//			while (StartOf(3)) {
//				SentenciasConstructor();
//			}
//		} else if (StartOf(2)) {
//			DeclaracionTipos();
//			while (StartOf(3)) {
//				SentenciasConstructor();
//			}
//		} else SynErr(54);
//	}
//
//	static void CuerpoMetodoMain() {
//		while (StartOf(4)) {
//			if (StartOf(2)) {
//				DeclaracionTipos();
//				while (StartOf(4)) {
//					CuerpoMetodoMain();
//				}
//			} else if (la.kind == 1) {
//				Asignaciones();
//				while (StartOf(4)) {
//					CuerpoMetodoMain();
//				}
//			} else if (la.kind == 1) {
//				LlamadaMetodo();
//				while (StartOf(4)) {
//					CuerpoMetodoMain();
//				}
//			} else if (la.kind == 38) {
//				For();
//				while (StartOf(4)) {
//					CuerpoMetodoMain();
//				}
//			} else if (la.kind == 39 || la.kind == 40) {
//				ES();
//				while (StartOf(4)) {
//					CuerpoMetodoMain();
//				}
//			} else {
//				Get();
//				Esperado(31);
//			}
//		}
//	}
//
//	static void Expresion() {
//		if (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//			ExpresionMat();
//		} else if (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//			ExpresionBool();
//		} else if (la.kind == 21) {
//			ExpresionLogica();
//		} else if (la.kind == 1) {
//			LlamadaMetodo();
//		} else if (la.kind == 19) {
//			OpCondicional();
//		} else if (la.kind == 9) {
//			Get();
//			Esperado(1);
//			Esperado(19);
//			while (la.kind == 1 || la.kind == 2 || la.kind == 19) {
//				Queue cola = simbolo.getcolaArgumentos();
//				int numarg = simbolo.getNumArgMetodo();
//				ArgLlamMet();
//			}
//			Esperado(25);
//			Esperado(31);
//		} else if (la.kind == 1) {
//			Get();
//			Esperado(16);
//			Esperado(1);
//		} else SynErr(55);
//	}
//
//	static void Sent1() {
//		Esperado(17);
//		SentenciasConstructor();
//		while (la.kind == 17) {
//			Sent1();
//		}
//		Esperado(23);
//	}
//
//	static void Sent2() {
//		if (la.kind == 1) {
//			Asignaciones();
//		} else if (la.kind == 1) {
//			LlamadaMetodo();
//		} else if (la.kind == 39 || la.kind == 40) {
//			ES();
//		} else SynErr(56);
//	}
//
//	static void ExpresionMat2() {
//		ExpresionMat3();
//		ExpresionMat21();
//	}
//
//	static void ExpresionMat1() {
//		if (la.kind == 22) {
//			Get();
//			Simbolo simbolo = new Simbolo("+",'a');
//			ExpresionMat2();
//			ExpresionMat1();
//		}
//	}
//
//	static void ExpresionMat3() {
//		if (la.kind == 19) {
//			Get();
//			ExpresionMat();
//			Esperado(25);
//		} else if (la.kind == 1) {
//			Get();
//			Simbolo simbolo = Buscar(ident);
//			if (simbolo == null) SemError ("error (currate el mensaje)");
//			if (simbolo.getTipo() != 'e') SemError ("error (currate el mensaje)");
//
//		} else if (la.kind == 2) {
//			Get();
//		} else if (la.kind == 1) {
//			Get();
//			Simbolo simbolo = Buscar(ident);
//			if (simbolo == null) SemError ("error (currate el mensaje)");
//			if (simbolo.getTipo() != 'v') SemError ("error (currate el mensaje)");
//
//			Esperado(18);
//			IndiceVector();
//			Esperado(24);
//		} else SynErr(57);
//	}
//
//	static void ExpresionMat21() {
//		if (la.kind == 26) {
//			Get();
//			Simbolo simbolo = new Simbolo("*",'a');
//			ExpresionMat3();
//			ExpresionMat21();
//		}
//	}
//
//
//
//	public static void Parse() {
//		la = new Token();
//		la.val = "";
//		Get();
//		CompilationUnit();
//		Esperado(0);
//
//	}
//
//	private static boolean[][] set = {
//		{T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
//		{x,x,x,x, T,x,x,x, T,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x},
//		{x,T,x,x, T,x,x,x, T,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x},
//		{x,T,x,x, T,x,x,x, T,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,T,T, T,x,x},
//		{x,T,x,x, T,x,x,x, T,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,T,T,T, T,x,x},
//		{x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x},
//		{x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
//		{x,T,T,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}
//
//	};
//
//} // end Parser
//
///* pdt - considerable extension from here on */
//
//class ErrorRec {
//	public int line, col, num;
//	public String str;
//	public ErrorRec next;
//
//	public ErrorRec(int l, int c, String s) {
//		line = l; col = c; str = s; next = null;
//	}
//
//} // end ErrorRec
//
//class Errors {
//
//	public static int count = 0;                                     // number of errors detected
//	public static String errMsgFormat = "file {0} : ({1}, {2}) {3}"; // 0=file 1=line, 2=column, 3=text
//	static String fileName = "";
//	static String listName = "";
//	static boolean mergeErrors = false;
//	static PrintWriter mergedList;
//
//	static ErrorRec first = null, last;
//	static boolean eof = false;
//
//	static String getLine() {
//		char ch, CR = '\r', LF = '\n';
//		int l = 0;
//		StringBuffer s = new StringBuffer();
//		ch = (char) Buffer.Read();
//		while (ch != Buffer.EOF && ch != CR && ch != LF) {
//			s.append(ch); l++; ch = (char) Buffer.Read();
//		}
//		eof = (l == 0 && ch == Buffer.EOF);
//		if (ch == CR) {  // check for MS-DOS
//			ch = (char) Buffer.Read();
//			if (ch != LF && ch != Buffer.EOF) Buffer.pos--;
//		}
//		return s.toString();
//	}
//
//	static private String Int(int n, int len) {
//		String s = String.valueOf(n);
//		int i = s.length(); if (len < i) len = i;
//		int j = 0, d = len - s.length();
//		char[] a = new char[len];
//		for (i = 0; i < d; i++) a[i] = ' ';
//		for (j = 0; i < len; i++) {a[i] = s.charAt(j); j++;}
//		return new String(a, 0, len);
//	}
//
//	static void display(String s, ErrorRec e) {
//		mergedList.print("**** ");
//		for (int c = 1; c < e.col; c++)
//			if (s.charAt(c-1) == '\t') mergedList.print("\t"); else mergedList.print(" ");
//		mergedList.println("^ " + e.str);
//	}
//
//	public static void Init (String fn, String dir, boolean merge) {
//		fileName = fn;
//		listName = dir + "listing.txt";
//		mergeErrors = merge;
//		if (mergeErrors)
//			try {
//				mergedList = new PrintWriter(new BufferedWriter(new FileWriter(listName, false)));
//			} catch (IOException e) {
//				Errors.Exception("-- could not open " + listName);
//			}
//	}
//
//	public static void Summarize () {
//		if (mergeErrors) {
//			ErrorRec cur = first;
//			Buffer.setPos(0);
//			int lnr = 1;
//			String s = getLine();
//			while (!eof) {
//				mergedList.println(Int(lnr, 4) + " " + s);
//				while (cur != null && cur.line == lnr) {
//					display(s, cur); cur = cur.next;
//				}
//				lnr++; s = getLine();
//			}
//			if (cur != null) {
//				mergedList.println(Int(lnr, 4));
//				while (cur != null) {
//					display(s, cur); cur = cur.next;
//				}
//			}
//			mergedList.println();
//			mergedList.println(count + " errors detected");
//			mergedList.close();
//		}
//		switch (count) {
//			case 0 : System.out.println("Parsed correctly"); break;
//			case 1 : System.out.println("1 error detected"); break;
//			default: System.out.println(count + " errors detected"); break;
//		}
//		if (count > 0 && mergeErrors) System.out.println("see " + listName);
//	}
//
//	public static void storeError (int line, int col, String s) {
//		if (mergeErrors) {
//			ErrorRec latest = new ErrorRec(line, col, s);
//			if (first == null) first = latest; else last.next = latest;
//			last = latest;
//		} else printMsg(fileName, line, col, s);
//	}
//
//	public static void SynErr (int line, int col, int n) {
//		String s;
//		switch (n) {
//			case 0: s = "EOF expected"; break;
//			case 1: s = "ident expected"; break;
//			case 2: s = "enteros expected"; break;
//			case 3: s = "cadenaCar expected"; break;
//			case 4: s = "boolean expected"; break;
//			case 5: s = "char expected"; break;
//			case 6: s = "class expected"; break;
//			case 7: s = "false expected"; break;
//			case 8: s = "int expected"; break;
//			case 9: s = "new expected"; break;
//			case 10: s = "short expected"; break;
//			case 11: s = "static expected"; break;
//			case 12: s = "true expected"; break;
//			case 13: s = "void expected"; break;
//			case 14: s = "dosPuntos expected"; break;
//			case 15: s = "comma expected"; break;
//			case 16: s = "punto expected"; break;
//			case 17: s = "llaveIzda expected"; break;
//			case 18: s = "corcheteIzda expected"; break;
//			case 19: s = "parentesisIzda expected"; break;
//			case 20: s = "menos expected"; break;
//			case 21: s = "not expected"; break;
//			case 22: s = "mas expected"; break;
//			case 23: s = "llaveDer expected"; break;
//			case 24: s = "corcheteDer expected"; break;
//			case 25: s = "parentesisDer expected"; break;
//			case 26: s = "multiplicacion expected"; break;
//			case 27: s = "div expected"; break;
//			case 28: s = "menor expected"; break;
//			case 29: s = "mayor expected"; break;
//			case 30: s = "igual expected"; break;
//			case 31: s = "puntoComa expected"; break;
//			case 32: s = "doblesComillas expected"; break;
//			case 33: s = "interrogacion expected"; break;
//			case 34: s = "\"public\" expected"; break;
//			case 35: s = "\"private\" expected"; break;
//			case 36: s = "\"main\" expected"; break;
//			case 37: s = "\"return\" expected"; break;
//			case 38: s = "\"for\" expected"; break;
//			case 39: s = "\"read\" expected"; break;
//			case 40: s = "\"print\" expected"; break;
//			case 41: s = "??? expected"; break;
//			case 42: s = "invalid Tipos"; break;
//			case 43: s = "invalid TiposSimples"; break;
//			case 44: s = "invalid DeclaracionTipos"; break;
//			case 45: s = "invalid Asignaciones"; break;
//			case 46: s = "invalid AsigAtributo"; break;
//			case 47: s = "invalid AsigVector"; break;
//			case 48: s = "invalid AsigVariable"; break;
//			case 49: s = "invalid ArgLlamMet"; break;
//			case 50: s = "invalid IndiceVector"; break;
//			case 51: s = "invalid CuerpoClase"; break;
//			case 52: s = "invalid LlamadaMetodo"; break;
//			case 53: s = "invalid ES"; break;
//			case 54: s = "invalid SentenciasConstructor"; break;
//			case 55: s = "invalid Expresion"; break;
//			case 56: s = "invalid Sent2"; break;
//			case 57: s = "invalid ExpresionMat3"; break;
//			default: s = "error " + n; break;
//		}
//		storeError(line, col, s);
//		count++;
//	}
//
//	public static void SemErr (int line, int col, int n) {
//		storeError(line, col, ("error " + n));
//		count++;
//	}
//
//	public static void Error (int line, int col, String s) {
//		storeError(line, col, s);
//		count++;
//	}
//
//	public static void Warn (int line, int col, String s) {
//		storeError(line, col, s);
//	}
//
//	public static void Exception (String s) {
//		System.out.println(s);
//		System.exit(1);
//	}
//
//	private static void printMsg(String fileName, int line, int column, String msg) {
//		StringBuffer b = new StringBuffer(errMsgFormat);
//		int pos = b.indexOf("{0}");
//		if (pos >= 0) { b.replace(pos, pos+3, fileName); }
//		pos = b.indexOf("{1}");
//		if (pos >= 0) { b.delete(pos, pos+3); b.insert(pos, line); }
//		pos = b.indexOf("{2}");
//		if (pos >= 0) { b.delete(pos, pos+3); b.insert(pos, column); }
//		pos = b.indexOf("{3}");
//		if (pos >= 0) b.replace(pos, pos+3, msg);
//		System.out.println(b.toString());
//	}

} // end Errors
